[Terraform] Terraform入門(5) - 利用Terraform來建置多個workspace
鼠年全馬鐵人挑戰 - WEEK 10
前言
不知不覺Terraform這系列的隨手筆記寫到第五篇,本文記錄如何透過撰寫Terraform腳本來開啟S3、DynamoDB,綁定IAM User,並建置在不同workspace下。
Hands on Lab
初始化專案
1 |
|
執行下方指令做初始化
1 |
|
建立S3 bucket、DynamoDB
再來就是建立S3 bucket、DynamoDB,會分別定義S3 bucket、DynamoDB兩個resource
,S3會設定生命週期為永久保存,並透過versioning
設定來紀錄多個版本號,若未來開發時,專案改壞了還可以退回前一個版本!
1 |
|
完成上述程式碼後執行下指令完成建立
1 |
|
查看兩者是否成功新增
S3
DynamoDB
配置IAM User
接著我們要將前面建立的S3、DynamoDB賦予某個User,為了方便管理,另外新建一個名為users的資料夾,目錄結構如下:
接著建立main.tf
,並寫入下方程式碼,執行terraform init
初始化
1 |
|
執行terraform apply
後查看新建立的User
查看S3設定,會發現剛才給予加密的種類-AES
修改S3存放檔案的路徑
上面的範例程式碼成功執行後,檔案會放在S3的根目錄底下,實務上可能會有很多專案存放,這時要個別歸類在不同的專案目錄下,所以我們將原始key
(作爲檔案存放路徑)改為dev/user/backendState-proj-dev
。
1 |
|
修改前要記得先執行
terraform init
進行初始化
系統會提示是否將狀態複製到新的狀態。
初始化完成後重新刷新頁面,會看到原本backendState-proj-dev的檔案路徑變成在dev/user/
這個路徑下。
建置多個workspace
查看當前的workspace
1 |
|
尚未建立其他workspace的情況下,workspace名稱為default。
建立新workspace
語法如下,workspace為自定的名稱
1 |
|
範例以prod-dev
作為新的workspace名稱
1 |
|
建立完新的workspace後要進行初始化
1 |
|
回到AWS S3 console介面會發現新增env:
資料夾,裡面存放剛才建立的workspace
查看env:
資料夾
不過這邊要注意一個地方,點開剛才建立workspace裡的檔案
會發現物件是空的!
怎麼回事???
因為我們把IAM User寫死了,造成與前一個workspace使用同一組IAM User name,因此將aws_iam_user
這個resource修改為動態的IAM User,以當前的workspace name作為前綴
1 |
|
接著執行terraform plan
觀察變化prod-dev
變為前綴名稱,接著執行terraform apply
回到workspace裡的檔案:
這一次物件裡面就不是空的~~~之後不管在其他workspace建立的IAM User也不會衝突!
切換至特定的workspace
如果要切回原本的workspace,語法如下方,workspace可替換成目前存在的workspace名稱
1 |
|
以切換回default為例:
1 |
|
查看所有的workspace
1 |
|
*
之處表當前所處的workspace
除了使用指令查看當前所處的workspace之外,也可以到專案資料夾下的
.terraform
目錄裡面有一個名為environment
的檔案,裡面會顯示當前workspace名稱。
最終的檔案目錄結構如下: